package org.kl.bpm.listener;

import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
import org.activiti.engine.impl.persistence.entity.TaskEntity;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class DefaultTaskListener implements TaskListener {
	private static final long serialVersionUID = 5703612555448690916L;
	private static Logger logger = LoggerFactory.getLogger(DefaultTaskListener.class);

	public void notify(DelegateTask delegateTask) {
		String eventName = delegateTask.getEventName();
		logger.debug("{}", this);
		logger.debug("{} : {}", eventName, delegateTask);

		if ("create".equals(eventName)) {
			try {
				this.onCreate(delegateTask);
			} catch (Exception ex) {
				logger.error(ex.getMessage(), ex);
			}
		}

		if ("assignment".equals(eventName)) {
			try {
				this.onAssignment(delegateTask);
			} catch (Exception ex) {
				logger.error(ex.getMessage(), ex);
			}
		}

		if ("complete".equals(eventName)) {
			try {
				this.onComplete(delegateTask);
			} catch (Exception ex) {
				logger.error(ex.getMessage(), ex);
			}
		}

		if ("delete".equals(eventName)) {
			try {
				this.onDelete(delegateTask);
			} catch (Exception ex) {
				logger.error(ex.getMessage(), ex);
			}
		}

		((TaskEntity) delegateTask).setEventName(eventName);
	}

	public void onCreate(DelegateTask delegateTask) throws Exception {
	}

	public void onAssignment(DelegateTask delegateTask) throws Exception {
	}

	public void onComplete(DelegateTask delegateTask) throws Exception {
	}

	public void onDelete(DelegateTask delegateTask) throws Exception {
	}
}
